/**
 * 
 */
package de.htw_saarland.webservices.xml;

import java.io.File;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;

import de.htw_saarland.webservices.robotersteuerung.data.RobotData;
import de.htw_saarland.webservices.robotersteuerung.data.SensorData;

/**
 * @author Sascha Diese Klasse dient dazu, die Sensordaten aus der XML Datei
 *         auszulesen Hiermit kann dann abgefragt werden, welche Sensoren auf
 *         einem Roboter vorhanden sind!
 * 
 */
public class SensorListHandler {

	private static final String ROBOID = "roboid";

	// Variable nötig um den korrekten Pfad zur xml Datei zu konstruieren
	private static String FILENAME = "/RoboSteuerung/WEB-INF/conf/sensorlist.xml";

	// XML Kram
	private SAXBuilder saxb = new SAXBuilder();
	private Document doc;

	private String pathToXml = null;

	/**
	 * Konstruktor
	 */
	public SensorListHandler() {
		try {
			// Versuch die Umgebungsvarialbe auszulesen!
			this.pathToXml = System.getenv("TOMCAT_APP_PATH");

		} catch (Exception ex) {
			System.out.println(ex.getMessage());
		}

	}

	/**
	 * Diese Methode liefert eine Liste mit Sensoren zurück die zum angegebenen
	 * Roboter gehören!
	 * 
	 * @param roboID
	 * @return Liste mit Sensordaten!
	 */
	public LinkedList<SensorData> getSensorList(String roboID) {
		Element root;
		List<Element> list;
		Iterator<Element> ite;
		String pathToXml = null;
		LinkedList<SensorData> sensorList = new LinkedList<SensorData>();

		try {
			// Versuch die Umgebungsvarialbe auszulesen!
			pathToXml = System.getenv("TOMCAT_APP_PATH");

		} catch (Exception ex) {
			System.out.println(ex.getMessage());
		}

		// ist die Umgebungsvariable != null fahre fort,
		if (pathToXml != null) {
			try {
				doc = saxb.build(new File(pathToXml
						+ SensorListHandler.FILENAME));
				root = doc.getRootElement();
				// Abfragen ob Root überhaupt Knoten besitzt
				if (root.getContentSize() > 0) {
					list = root.getChildren();
					ite = list.iterator();
					while (ite.hasNext()) {
						// Aufbau der einzelnen SensorData Objekte
						Element tmp;
						tmp = ite.next();
						if (tmp.getChildText(SensorListHandler.ROBOID).trim().equals(
								roboID.trim()))
						{
							SensorData sd = new SensorData(); 
							sd.id = tmp.getChildText("id"); 
							sd.type = tmp.getChildText("type"); 
							sd.description = tmp.getChildText("description"); 
							sensorList.add(sd); 
						}
					}
				}
			} catch (Exception ex) {
				System.out.println(ex.getMessage());
			}
		}
		return sensorList;
	}

}
